public class Test4 {

    public int add(int a, int b) {
        return (a + b);
    }

    public static void main(String[] args) {

        SStu student1 = new SStu("AA",15);
        SStu student2 = new SStu("BB",15);
        SStu student3 = new SStu("CC",15);

        SStu.classRoom = "109";//访问方式：类名 . 静态成员变量
        System.out.println(SStu.classRoom);

        SStu.func1();//调用方式：类名 . 静态成员方法

        Test4 test = new Test4();//在静态方法中调用非静态方法只能通过创建对象来引用非静态方法
        System.out.println(test.add(1, 2));


    }
}

class SStu {
    private String name;//普通成员变量，属于对象，访问方式：对象的引用 . 普通成员变量
    private int age;
    public static String classRoom;//静态成员变量（类变量），不依赖于对象
    //当把 classRoom 用 ststic 修饰后， 它就不存在于堆区中的对象当中了，而是存放在方法区中，所有创建的对象共用一个 classRoom

    public SStu(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void func1() {
        System.out.println("这是一个静态方法");//（类方法）

        //show();静态方法内部，不能直接调用非静态方法
        SStu student4 = new SStu("DD",15);
        //只能通过对象的引用来引用非静态方法
        student4.show();
        student4.name = "EE";

        func2();//静态方法中可以直接调用静态方法
        //同一个类中的方法调用不用 类名 .

        System.out.println(SStu.classRoom);//在同一个类中时，静态成员加不加 类名 . 都可以
        //静态方法中可以直接调用静态变量
    }
    //静态方法中 不能直接调用成员变量（不能使用 this ）：静态方法不依赖对象，而成员变量依赖对象

    public static void func2() {
        System.out.println("这个也是静态方法");
    }


    public void show(){
        func1();//非静态方法中可以直接调用静态方法
        System.out.println("这是一个非静态方法");
        System.out.println(SStu.classRoom);//在同一个类中时，静态成员加不加 类名 . 都可以
        //非静态方法也可以直接调用非静态方法


        //静态代码块 > 实例代码块 > 构造方法
        //静态代码块只执行一次
        //如果多个静态代码块，按照顺序来执行
        //实例代码块只有创建变量的时候才会执行（ new 实例化 对象的时候才会执行）
    }
}